package spring.aspect;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class OperateLogger {
	
	private Logger logger = Logger.getLogger(this.getClass()); 
	
	//@Before("within(spring.service..*)")
	public void log1(){
 		logger.info("--记录用户操作记录");
	}
	
	//@Around("within(spring.controller..*)")
	public Object log2(ProceedingJoinPoint p) throws Throwable{
		
		//目标组件的类名
		String className = p.getTarget().getClass().getName();
		
		//调用的方法名
		String method = p.getSignature().getName();
		
		//当前时间
		String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").
				format(new Date());
		
		//拼写日志
		String msg = "-->用户在"+date+",执行了"+className+"."+method+"()";
		
		//记录日志
		logger.info(msg);
		
		//执行目标组件的方法
		Object obj = p.proceed();
		
		//调用目标组件后也可以处理一些任务
		logger.info("-->调用目标组件后的业务方法");
		
		return obj;
	}
	
	
	public void log3(Exception e){
		StackTraceElement[]  elems = e.getStackTrace();
		logger.info("-->"+elems[0].toString());
		
	}
	
	
	
}
